package com.dwin.h5.app.utils;

import android.util.Base64;
import android.util.Log;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 图片16进制处理
 */
public class ImageHexTool {

    static String frameNo = ""; // 拍照的编号
    static String frameSubCount = ""; // 子帧数量
    static String frameSubNo = ""; // 子帧编号
    static List<DataBean> tempData = new ArrayList<>(); // 临时保存收到的数据

    /**
     * 图像的指令格式为： 类型（1B）+ 帧序号（1B）+ 子帧总数（1B）+子帧编号（1B） + 宽（2B）+高（2B）   总共8个字节。
     *  TODO
     * @param hex
     */
    public static String handleImageData(String hex) {
        if (hex.length() <= 16) { // 存在有效消息体
            System.out.println("msg长度不够");
            return null;
        }
        String frame_header = hex.substring(0, 14); // 头信息,无效信息
        String frame_type = hex.substring(14, 16); // 类型
        String frame_no = hex.substring(16, 18); // 帧序号（第几次拍照）
        String frame_sub_count = hex.substring(18, 20); // 子帧总数量
        String frame_sub_no = hex.substring(20, 22); // 子帧编号

        String frame_width = hex.substring(22, 26); // 宽/高（各2B）
        String frame_height = hex.substring(26, 30);
        String frame_data = hex.substring(30); // 内容体

        // 第一帧数据 或 主帧变了，说明上个帧已经作废。
        if ("01".equals(frame_sub_no) || !frameNo.equals(frame_no)) {
            tempData.clear(); // 清空数据
            frameNo = frame_no;
            DataBean bean = new DataBean(frame_sub_no, frame_data);
            tempData.add(bean);
        } else if (frameNo.equals(frame_no)) {
            DataBean bean = new DataBean(frame_sub_no, frame_data);
            tempData.add(bean);
        }
        Log.d("hexTool", hex);
        Log.d("hexTool", "frame_sub_no:" + frame_sub_no);
        // 到达了最后一帧了, 返回数据给h5显示
        if (frame_sub_count.equals(frame_sub_no)) {
            String header = "data:image/png;base64,";

            Collections.sort(tempData); // 对收到的数据，排序保证顺序正确。
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < tempData.size(); i++) {
                sb.append(tempData.get(i).data);
            }
            byte[] result = Base64.encode(HexTool.hexToByteArray(sb.toString()), Base64.NO_WRAP);
            String value = new String(result);
            header = header + value;
            return header;
        }
        return null;
    }

}
